import AMapLoader from "@amap/amap-jsapi-loader";

  // 初始化
  export const initAMap = () => {
    return AMapLoader.load({
      key: "04d94a5dafdc09ddbdc6d807b95bf515",
      version: "2.0",
      plugins: [],
    });
  };

  // // 获取用户的精确位置信息，并返回详细坐标信息。
  export const getLocationInfo = () => {
    return new Promise((resolve, reject) => {
      initAMap().then(AMap => {
        AMap.plugin('AMap.Geolocation', () => {
          const geolocation = new AMap.Geolocation({
            enableHighAccuracy: true, // 是否使用高精度定位，默认：true
            timeout: 5000, // 设置定位超时时间，默认：无穷大
            offset: [1, 2], // 定位按钮的停靠位置的偏移量
            zoomToAccuracy: true, //  定位成功后调整地图视野范围使定位位置及精度范围视野内可见，默认：false
            position: 'RB' //  定位按钮的排放位置,  RB表示右下
          });
          
          // 获取定位详情
          geolocation.getCurrentPosition((status, result) => {
            if (status === 'complete' && result) {
            resolve(result); // 返回结构化后的位置信息
            } else {
              console.log("获取不到=========")
              reject(new Error('获取定位信息失败'));
            }
          });
        });
      }).catch(error => reject(error));
    });
  };
  
  // 获取用户所在的省份和城市
  export const getLocationCity = () => {
    return new Promise((resolve, reject) => {
      initAMap().then(AMap => {
        AMap.plugin('AMap.Geolocation', () => {
          const geolocation = new AMap.Geolocation({
            enableHighAccuracy: true, // 是否使用高精度定位，默认：true
            timeout: 10000, // 设置定位超时时间，默认：无穷大
            offset: [1, 2], // 定位按钮的停靠位置的偏移量
            zoomToAccuracy: true, //  定位成功后调整地图视野范围使定位位置及精度范围视野内可见，默认：false
            position: 'RB' //  定位按钮的排放位置,  RB表示右下
          });
          
          // 进获取省份和城市
          geolocation.getCityInfo((status, result) => {
            if (status === 'complete') {
              resolve(result);
            } else {
              reject(new Error('获取定位信息失败'));
            }
          });

        });
      }).catch(error => reject(error));
    });
  };

  // 在地图上设置一个标记（Marker），标记的位置由经纬度决定。
  export const setMarker = (lng, lat) => {
    return new Promise((resolve, reject) => {
        initAMap().then(AMap => {
        AMap.plugin(["AMap.Marker"], () => {
          const marker = new AMap.Marker({
            position: new AMap.LngLat(lng, lat), //经纬度对象，也可以是经纬度构成的一维数组[116.39, 39.9]
          });
          resolve(marker)
        })
      }).catch(error => reject(error))
    })
  }

  // 获取用户所在城市的信息
  export const getCity = () => {
    return new Promise((resolve, reject) => {
      initAMap().then(AMap => {
        AMap.plugin('AMap.CitySearch', () => {
          var citySearch = new AMap.CitySearch({
            enableHighAccuracy: true, // 是否使用高精度定位，默认：true
            timeout: 10000, // 设置定位超时时间，默认：无穷大
            offset: [10, 20],  // 定位按钮的停靠位置的偏移量
            zoomToAccuracy: true,  //  定位成功后调整地图视野范围使定位位置及精度范围视野内可见，默认：false
            position: 'RB' //  定位按钮的排放位置,  RB表示右下
          })
          citySearch.getLocalCity((status, result) => {
            if (status === 'complete') {
              resolve(result)
            } else {
              reject(new Error('get city error'));
            }
          });
        })
      }).catch(error => reject(error))
    })
  }

  // 根据输入的查询关键字提供自动完成的搜索建议。
  export const getSearchOptions = (query) => {
    return new Promise((resolve, reject) => {
      initAMap().then(AMap => {
        AMap.plugin(["AMap.AutoComplete"], () => {
          let autocomplete = new AMap.AutoComplete();
          autocomplete.search(query, (status, result) => {
            if (status === 'complete') {
              resolve(result)
            } else {
              reject(new Error('get search error'));
            }
          })
        });
      }).catch(error => reject(error))
    })
  }

  // 根据关键词进行地点搜索，并返回搜索结果。
  export const getPlaceSearch = (keyword) => {
    return new Promise((resolve, reject) => {
      initAMap().then(AMap => {
        AMap.plugin(["AMap.PlaceSearch"], () => {
          let placeSearch = new AMap.PlaceSearch();
          placeSearch.search(keyword, (status, result) => {
            if (status === 'complete') {
              resolve(result)
            } else {
              reject(new Error('get place search error'));
            }
          })
        })
      }).catch(error => reject(error))
    })
  }

  export const GeocoderGetAddress = (lng, lat) => {
    return new Promise((resolve, reject) => {
      this.initAMap().then(AMap => {
        AMap.plugin(['AMap.Geocoder'], () => {
          let geocoder = new AMap.Geocoder({})
          geocoder.getAddress([lng, lat], function (status, result) {
            if (status === 'complete' && result.info === 'OK') {
              resolve(result)
            } else {
              reject(new Error('get geocoder address error'));
            }
          })
        })
      }).catch(error => reject(error))
    })
  }

  // 根据经纬坐标解码省份城市
  export const getProvinceAndCityByCoords = (lng, lat) => {
    return new Promise((resolve, reject) => {
      initAMap().then(AMap => {
        AMap.plugin('AMap.Geocoder', () => {
          let geocoder = new AMap.Geocoder({
            radius: 100, // 范围，单位是米
            extensions: "all" // 返回地址组成详细结构
          })
          geocoder.getAddress([lng, lat], function(status, result) {
            if (status === 'complete' && result.info === 'OK') {
              resolve(result)
            } else {
              reject(new Error('get province and city by coordinates error'))
            }
          })
        })
      }).catch(error => reject(error))
    })
  }
